package Questao;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class QuestaoMultiplaEscolha extends Questao
{
    private String[] alternativas;
    
    private List<Integer> numerosSorteados = new ArrayList<Integer>();
    private static final int NUM_ALTERNATIVAS = 4;
    private int aleatorio = (int)Math.random() % NUM_ALTERNATIVAS;
    private int seed = 0;
    private Random r;

    public QuestaoMultiplaEscolha(String pergunta,Dificuldade dificuldade,String[] respostas,String respostaCorreta)
    {
        super(pergunta,respostaCorreta, dificuldade);
        this.alternativas = respostas;
    }

    public QuestaoMultiplaEscolha(){}

    @Override
    public String getTipoQuestao()
    {
        return "Multipla Escolha";
    }

     public String[] getAlternativas() {
        return alternativas;
    }

    public void setAlternativas(String[] alternativas) {
        this.alternativas = alternativas;
    }

    private int getPosicaoAleatoria()
    {
        r = new Random(System.currentTimeMillis() + seed++);
        aleatorio =  0 + r.nextInt(NUM_ALTERNATIVAS);
        while ((numerosSorteados.contains(aleatorio)) && (numerosSorteados.size()<=NUM_ALTERNATIVAS))
        {
            r = new Random(System.currentTimeMillis() + seed++);
            aleatorio =  0 + r.nextInt(NUM_ALTERNATIVAS);
        }
        numerosSorteados.add(aleatorio);
        return aleatorio ;
    }

    private String[] getAlternativasAleatorias()
    {
        String[] novaOrdem = new String[NUM_ALTERNATIVAS];
        for (int i = 0; i < NUM_ALTERNATIVAS; i ++){
            novaOrdem[getPosicaoAleatoria()] = alternativas[i];
        }
        return novaOrdem;
    }

    @Override
    public String[] getConjuntoAlternativas()
    {
        if(numerosSorteados.size() == NUM_ALTERNATIVAS)
        {
            String[] opcoes = new String[NUM_ALTERNATIVAS];

            for (int i = 0; i < NUM_ALTERNATIVAS; i ++)
                opcoes[numerosSorteados.get(i)] = alternativas[i];

            return opcoes;
        }
        else
            return getAlternativasAleatorias();
    }
}
